SunSoft's NEO Product Family


Product Overview

Contents

Introduction

Building Flexible Enterprise Systems Using Shared Services
Objects as an Enabling Technology
Networked Objects for Enterprise Computing
Shared Services Enable Multi-Tier Client-Server Computing
NEO from SunSoft
The Benefits of NEO
A Comprehensive Networked Object Environment
NEO - A Complete Solution
The Solaris NEO Operating Environment
NEO Desktop
OpenStep
NEO Network
NEO Services
Solstice NEO
System Administration
Application Management
The WorkShop NEO Development Environment
WorkShop NEO
Tools to Build Graphical Applications
Tools to Build Networked Objects
Other Tools
Development Frameworks
Enterprise Integration with NEO
Windows Connectivity
Database Connectivity
The World Wide Web



Introduction


Building Flexible Enterprise Systems Using Shared Services

The rapidly accelerating rate of change in today's information-rich business environment makes flexibility a key attribute in a company's productivity and profitability. In the past, product and business cycles were improved through a process of gradual, continuous refinement. Now, business is characterized by a highly competitive climate that forces management, end users, developers, and business practices to become better able to accommodate sudden and comprehensive change. In this marketplace, enterprises must look for strategic advantages through computing infrastructures that are engineered for flexibility.

Dramatically improving the ability to respond to these pressures, the NEO(TM) product family from SunSoft(TM) represents a new approach to building enterprise-wide software systems. Because object-based programs support reuse, engineers can now construct complex applications with far less effort than before. For enterprises involved in the development of networked objects, NEO supports the creation of applications that are substantially faster to construct and easier to evolve. This paper provides an overview of NEO technology, including the operating environment, developer and management tools, and available connectivity and migration products.

Objects as an Enabling Technology

Despite attempts to refine the process of software development, it is still largely a hand craft — each new application contains far too much new, custom code. The answer to getting better reuse from software is object-based programming. Objects are self-contained, clearly defined, software modules that encapsulate business practices and their data. Communicating with each other through carefully defined interfaces, objects allow complex solutions to be constructed much as today's computers are manufactured from standardized electronic components. Multiple levels of re-use and standardization is made possible by this simplification, enabling engineers to produce modules, applications, and even entire systems that are highly reusable and leveragable. Creating software in this way promises to bring profound benefits to enterprises that rely on software development, including the ability to move more quickly, reduce the effort required to complete projects, lower costs, and better meet requirements.

Networked Objects for Enterprise Computing

Today, networks of PCs, workstations, servers, and mainframe systems exchange information, allow access to important applications from distant locations, and ensure better availability through decentralization. Networking technology, like that available from Sun, has allowed businesses to reflect their own organizational structure in their MIS infrastructure, eliminating bottlenecks and placing computing power in the hands of those who need it. There is no doubt that if object technology is to help enterprises, it will have to be built on a strong networking foundation.

Networked object technology allows applications access to objects and their shared services anywhere in the enterprise, no matter where the application or object resides. Networked objects also permit individual objects to be updated without the risk of disrupting the application or business process it models—if a new component fails, its predecessor can be re-instated quickly and transparently—facilitating the graceful, incremental, evolution of complex systems. Coupled with powerful networks, object computing can create a new class of enterprise application that is flexible, powerful, centrally administered, and inexpensive to create.

Shared Services Enable Multi-Tier Client-Server Computing

The next wave of client-server computing, shared services provide application components on the network, allowing a group of individual computers to be transformed into an integrated unit. Using shared services, the same concepts that make the Internet so powerful can be applied to enterprise computing (figure 1). The key software components of an enterprise — the applications and data that run a business — can be accessed from a variety of front-end environments (Solaris, Windows, or a Web browser). Services that make up applications can be shared by multiple users simultaneously, and because they are highly modular, can be enhanced and updated with minimal disruption. Individuals are given the freedom to use and develop applications they need on the platforms that suit them best, and yet the corporate assets can be controlled, managed, and run in a robust, Solaris-based environment.

Figure 1 Using SunSoft NEO shared services, key business functions can be implemented once and shared among multiple applications and client environments.

To be truly useful, object-based, shared services environments must provide the following features. By building on their leadership in distributed, client server technology, SunSoft's NEO product family meets every one of these requirements:

Simply put, NEO is the next generation computing environment for enterprises that believe in information systems as a strategic business advantage.


NEO from SunSoft


The Benefits of NEO

Enhancing and extending current SunSoft products, NEO offers a complete operating environment for building a new class of flexible, networked, object-based enterprise applications based on shared services. With NEO products, enterprises will be able to meet the urgent demands that face all organizations needing to improve developer productivity, gain strategic advantage, and lower costs:

Faster Enterprise Software Development
NEO makes enterprise computing infrastructure more flexible, enabling a faster "cycle time" in responding to market demands, emerging opportunities, new management directives, changing business practices, and customer requirements.

Write Less Software
With application frameworks built directly into the environment, NEO allows programs to be quickly constructed, easily modified, and simply managed. This base of "core functionality" in NEO also permits a graceful evolution to successively more powerful applications without sacrificing backwards compatibility.

The Corporate Web
Using Sun's Java(TM) object-oriented programming language, Web pages can employ the same robust shared services used by internally developed applications. No longer limited to viewing specially formatted, static content, World Wide Web users can directly and interactively access genuine business applications and data.

Customized Applications that Meet User Requirements
Unlike "shrink wrapped" programs that often represent a compromise in functionality, NEO object technology permits the rapid prototyping and development of applications to exactly meet end-user requirements.

Reduced Costs
With a business environment that shortens the useful lifetime of applications, how can the huge investments in them be reduced? Because it is designed to promote the continued reuse of objects, NEO allows modules, programs, and even entire application architectures to be continually reused, preserving investments in programming. When modifications are required, WorkShop NEO development tools allow them be completed more quickly and with less effort, further reducing costs.

Optimized Computing Investments
NEO combines the flexibility of multi-tier client/server computing and the reliability and manageability of mainframe computing environments. Furthermore, because NEO is an extension to, and not a replacement of, Solaris(TM), NEO applications enjoy the same interoperability and connectivity that has made Solaris famous. Legacy systems and applications on mainframes, minicomputers, personal computers running Windows, and other UNIX®-based environments—all can coexist with NEO.

A Comprehensive Networked Object Environment

SunSoft's NEO product offering includes all of the components vital to creating, running, administering, and integrating shared services applications into enterprise computing environments:

Operating Environment
Solaris NEO, the NEO operating environment, is an extension to the Solaris networked operating environment. Solaris provides a solid foundation of capabilities to ensure that object-based applications are powerful, scalable, easy to administer, and reliable. Solaris NEO adds to this OMG CORBA compliance and conformance to the OpenStep specification.

Development Tools for Creating Networked Objects
SunSoft has invested in robust, market-tested tools to develop and deploy networked object applications that minimize programming, improve the ability of engineers to create applications that exactly meet requirements, enhance creativity while upholding corporate standards, and support the creation of large programs by teams of developers. SunSoft's development environment is based their proven WorkShop technology and NEXTSTEP(TM), the most advanced, object-oriented, GUI development environment in the industry.

Bringing Commerce to the Internet
Because of its heterogenous nature and global accessibility, the World Wide Web is fast becoming a preferred application deployment platform, ideal for hosting custom applications for internal use, commerce, or customer service. With NEO, companies can create their core business functionality or services in distributed CORBA-compliant objects, and then share these services among a variety of front-end environments, including OpenStep, Microsoft Windows, or a Web browser.

Administration Tools
Administration is a significant cost for enterprise computing environments. To ensure that the economies of NEO extend to systems management, SunSoft has created powerful Solstice(TM) NEO tools to ensure positive control over every facet of administration:

Connectivity with Legacy Systems, Data, and Desktops
Little commercial software is built in a vacuum, completely removed from legacy data, existing applications, or heterogenous platforms. SunSoft has crafted the necessary procedures, tools, and guidelines to make coexistence with these environments straightforward and trouble-free. Tools and techniques to support Solaris NEO connectivity to mainframe databases, Windows applications running on personal computers, and object environments are available from other vendors.

Standards Compliance

Consisting of a membership of over 600 software vendors, developers, and end user organizations, the Object Management Group (OMG(TM)) continues to develop the standards that will ensure a common architecture for heterogeneous, distributed, object oriented applications. The OMG Common Object Request Broker Architecture (CORBA) is designed to allow different object systems from multiple vendors to interact seamlessly with each other on the network. The CORBA specification defines four important components:

Figure 1 NEO has everything required to allow enterprises to begin investing in objects now.

NEO - A Complete Solution

Objects are the focus of a major effort at SunSoft, and NEO allows organizations to begin their investment in networked objects now. By extending the Solaris environment to accommodate networked objects, the Solaris NEO environment builds on a distributed computed backbone that provides transparent, heterogeneous connectivity (figure 2). NEO also includes an advanced, robust development environment to enable rapid building and delivery of tools and applications with a consistent, intuitive, graphical user interface. The networking infrastructure encompasses not only UNIX, but includes OLE-compliant MS-Windows applications, as well as transparent access to both relational and object based databases. Support for Java technology enables integration of NEO applications and the Internet. Comprehensive, network-based administration tools complete the picture of Sun's networked object environment.


The Solaris NEO Operating Environment


Building on the Solaris networked operating environment, Solaris NEO provides three key components:

NEO Desktop

Solaris NEO begins with a powerful, intuitive desktop environment based on OpenStep, which SunSoft is adopting as a foundation standard. OpenStep technology is widely regarded by the computing industry as the benchmark environment for constructing object-based graphical applications. Today, OpenStep has been adopted as a standard API by many leading vendors. This environment ensures the availability of powerful tools and a usage metaphor to streamline the tasks of users, developers, and system administrators.

NEO Desktop emphasizes a rich visual environment based on X11 with Display PostScript(TM) extensions, providing an intuitive, easy to use, high quality, high bandwidth multimedia user environment. Active icons, advanced drag and drop support, embedded multimedia capabilities, and integrated help facilities enhance the user experience and productivity. Interface consistency aids users in adapting to employing new applications quickly, and productivity is improved because the same functionality is available for all desktop applications. As an example, the spell checker may be invoked by the editor, electronic mail, or any other desktop application.

Desktop applications included with NEO Desktop include:

Window Manager
Provides tear-off menus, drag and drop file manipulation, and easy file browsing. Under the window manager, applications maintain a consistent look, allowing users to get up to speed with new applications quickly.

Workspace Manager
Provides tools to interact with the environment, including a handy application dock from which to launch frequently used applications.

Text Edit
A multifont WYSIWYG text editor.

Multimedia Mail
A MIME-compatible multimedia mailer.

Postscript Preview
Provides ability to view PostScript and TIFF files.

Terminal
Provides UNIX-style terminal capability

User Preferences
Allows users to select security, interface, and language configurations.

NEO Desktop extends SunSoft's universal desktop, a medium that gives users an intuitive environment from which to run all of their applications. Support is provided in NEO Desktop for object-oriented NEO applications, conventional Solaris applications, OpenStep-compliant applications, and Common Desktop Environment (CDE) compliant applications (figure 3). Support for MS-Windows applications is available through Wabi(TM), and Apple Macintosh applications can be run under Solaris with the Macintosh Application Environment (MAE).

OpenStep-compliant applications run within the desktop environment and may be executed directly from the CDE tool palette. Users may choose to use a particular environment or interact between them with cut and paste functionality anywhere on the desktop.

Figure 2 Solaris NEO extends Solaris, giving users an environment from which to run all of their applications.

OpenStep

The OpenStep runtime system supports powerful reusable application building blocks called frameworks. These frameworks are used by developers in conjunction with the NEOworks(TM) Graphical Application Builder, and support: rich data types; a common imaging model for screen and hardcopy using Display PostScript; common fonts; print management; and a consistent help model.

The AppKit class library is SunSoft's implementation of the OpenStep GUI and Application Frameworks. AppKit supports a complete set of user interface objects and controls, data sharing, and inter-application communication. The NEO FoundationKit class library supports OpenStep Foundation Framework features such as lower level data types.

NEO Network

NEO Network raises the functionality of the operating environment to handle networking functions that applications once had to take responsibility for. With NEO Network, networked objects can execute remotely or locally, without the knowledge of the programs using them, allowing administrators to balance loads at runtime and to ensure high availability for critical applications. Objects can interoperate with each other on the network because they conform to industry network and interface standards. Multiple applications can re-use existing objects, ensuring common practices and interfaces. Upgrades can be made seamlessly without disturbing other software or operations.

Connecting and managing objects over the network requires the services of an OMG CORBA-compliant Object Request Broker, a suite of CORBAservices-compliant object services, support for static and dynamic linking, and transparent network application distribution.

Object Request Broker

The NEO Network Object Request Broker (ORB) is a CORBA-compliant networked-based software system providing for the seamless location and execution of objects through a standard interface protocol, enabling objects and programs to transparently interact with each other across the network. The NEO ORB is implemented as one or more multithreaded UNIX processes, providing scalable performance and availability as needed.

ORB-to-ORB Interoperability

Continuing to foster truly heterogeneous object interoperability for the future, SunSoft and the OMG have provided a highly portable source code reference implementation of the CORBA 2.0 Internet inter-ORB Protocol to help software vendors test and deliver OMG-compliant products. The Internet Inter-ORB Protocol (Internet IOP) provides a single standardized way of connecting ORBs from different CORBA 2.0 compliant vendors and will enable them to seamlessly communicate with each other.

Object Services

The OMG CORBAservices definition describes the basic operations required for building distributed systems with objects. NEO Network Object Services will support the naming, events, properties, lifecyle, and relationship services in its initial release. Additional services are planned for future releases.

NEO Services

NEO Services provides the basic shared services that raise the base-level functionality of the platform. The NEO Services runtime system provides advanced support for networked applications and shared services. With many of the functions needed by enterprise computing environments already available, NEO Services is an integrating force, providing a consistency that makes it easier to share objects among multiple applications:

Workgroup Support and Shared Service Finder
NEO makes it easy to achieve the advantages of network computing by allowing users in workgroups to share resources, services, applications, and data. Each workgroup member can choose to use local or shared workgroup resources for each application, and control which of their local resources may be shared by other users in the workgroup.

Concurrency Requests
NEO applications take advantage of multiprocessing and multithreaded technologies to gain high performance and availability. The concurrency service supports creation and management of threads and deadlock avoidance.

Server and Persistent Object Availability
If an application or networked object is not running when requested, the availability service can start, or re-start, an object automatically, and restore its context to the state it was in before it halted.

Data Store Manager
In conjunction with Persistent Object Availability, the Data Store Manager provides transparent persistence for the state of an object. Based on the OMG CORBA services Persistent Object Specification, it provides support for fine-grained objects, type safety, and efficient caching of attribute values.

Server Management
Users and administrators can interactively explore the state of systems and software components throughout the network with the application administrations service. A rich set of tunable controls enables users and system administrators to balance computer loads, collect logging and tracing information, and track errors.

Application Installation
Software upgrades may be performed with little or no impact to users because the installation service controls the location of the application's shared software components, each of which may be suspended and upgraded individually. Installation registers an application with the network wide workgroup and allows any client in the workgroup to use the application.

Implementation Support
This service provides functions that simplify the development of object implementations. Includes support for servant creation and management, smart object references, exception handling, object tracing, and message logging.


Solstice NEO


The need for powerful administration and management tools was a powerful lesson from the first networked environments. With systems distributed across the enterprise, making system managers more efficient dictated that the network should be used to manage itself. Similarly, NEO depends heavily on its own ability to know the location and status of objects and applications to help simplify the task of its administration. Furthermore, NEO developer tools provide the infrastructure to ensure that new objects will have the hooks needed to support their own management.

Adding the administration and management of object-based network applications and shared services to the Solstice product family, Solstice NEO gives managers the power to control resources from any point on the network and throughout the lifecycle of development, deployment, enhancement, and object retirement. Multiple systems can offer alternative or backup implementations in a workgroup network to help balance loads and ensure availability. Workgroup administration functions are supported by both a GUI interface tool that visually portrays the state of the applications and computers in the workgroup, and by a command line version that is suitable for scripted automation.

NEO System Administration

Commands to the neoadmin object administration tool perform basic system management tasks such as starting and stopping ORBs, controlling and displaying the status of object servers and processes, directing tracing and logging facilities, and managing workgroups. This command line interface program is useful in makefiles and other automated administration applications.

Application Management

The ServerViewer allows administrators to manage object servers through an intuitive graphical user interface and includes the ability to startup, shutdown, troubleshoot, and monitor server usage. It is used to make queries to locate servers and object implementations, and to determine if a server is active and if it is accepting new requests. Runtime monitoring and management of networked objects includes support for installation, observing and modifying state, and browsing contents of naming and directory services (figure 4).

Figure 3 ServerViewer performs basic system management tasks such as controlling and displaying the status of object servers and processes, controlling tracing and logging facilities, and managing workgroups.

Object-based environments have natural advantages for system administration such as "transparent hotswap" capability, allowing rapid response to bottlenecks and network events, permitting better load balancing and smooth upgrades.


The WorkShop NEO Development Environment


Software development is a principal beneficiary of object-oriented methods. Good programming practices are encouraged because object development requires well defined, strongly typed interfaces between functions. NEO provides further advantages in that it facilitates application distribution with built in administration hooks and networking capabilities. Multithreaded programming tools also helps to optimize program performance, because tasks can be constructed as individual threads within an application, each of which can execute independently on their own processor. Extending the philosophy of networked objects to the development environment, NEO developer tools are more than just tools—they are loosely-coupled application components that work together as a unified whole.

WorkShop NEO

Based on SunSoft's popular WorkShop product, the WorkShop NEO development environment, which includes NEOworks, provides a comprehensive, integrated set of tools and compilers to facilitate the development of distributed, object-based applications. Using WorkShop NEO, it is easy to build applications that have a consistent, intuitive graphical user interface, exhibit uniform use of common resources, are independent of execution environment, and exhibit greater reliability.

Tools are also available to coordinate the activities of software development teams in large projects. These give individual programmers the freedom to express their creativity and make decisions while still maintaining a well defined, coherent workgroup approach to developing software solutions.

Tools to Build Graphical Applications

Transparently extending objects and tools across the network, the OpenStep-based NEOworks Graphical Application Builder tools are key for designing and developing networked objects and shared services applications.

Interface Builder

The Interface Builder is a desktop tool that helps design, build, prototype, and test the presentation layer of the application, allowing developers to concentrate on program functionality rather than the time consuming details of interface implementation. It encourages new objects to be developed and shared, propagating consistent interface methods. Interface Builder also manages the interactions between objects such as messages that may be sent and received between objects. The rapid prototyping ability and ease with which changes can be made make the interface development cycle simple, fast, and effective.

Project Builder

Project Builder is a desktop tool that logically groups, connects, and manages the files and components of an OpenStep application. Acting as a coordinator for the development process, it is the focal point for each project from conception to installation, providing access to tools that edit, build, and debug the application.

Icon Builder

Custom icons are easily built with the Icon Builder which can also provide links to advanced drawing tools if complex drawing capabilities are required.

Header Viewer

A class browser for navigating class hierarchies. the Header Viewer displays classes, methods, protocols and other language constructs. Useful when working with the AppKit and FoundationKit, because Header Viewer can accommodate Objective C library headers.

Tools to Build Networked Objects

One important goal of WorkShop NEO is to greatly increase developer productivity. Besides offering the natural paradigm shift that makes object computing so efficient, NEOworks networked object developer tools provide a state of the art development environment designed to optimize the process of developing objects and applications.

Networked Object Constructor

Facilitating the development of distributed object systems is the primary goal of the Networked Object Constructor. It provides mechanisms for much of the details of the implementation such as specifying how an object is to be created, where it is to be installed, and what its activation and deactivation behavior is. The Networked Object Constructor allows the developer to provide a few simple specifications and the builder produces an object.

Objects built with the Networked Object Constructor support are automatically activated and deactivated on an as-needed basis. It also registers an object implementation with the Object Request Broker. A built-in persistence mechanism saves the user or developer from being concerned with supplying their own storage scheme. Concurrency control, including mutex locking, is an essential part of the Networked Object Constructor. Debugging is assisted by an automatic logging and tracing facility.

OMG-Compliant IDL Compiler

For different object systems to successfully interact with each other, language independence is essential. The Interface Definition Language (IDL) enables the separation of interface and implementation, allowing object implementation details to change without compromising the plug-and-play qualities of the object. The key to language independent software development, the OMG IDL is a neutral interface definition of an object's operations, allowing the behavior of the object to be defined in IDL but accommodating the automated transformation of the interface to the C, C++, Objective C, or Smalltalk languages. The NEOworks IDL Compiler supports C++ syntax for constant, type, and operation declarations.

Networked Object Debugger

Based upon the standard SPARCworks MT debugger which manages multiple processes, servers, and thread contexts, the NEOworks Networked Object Debugger also supports distributed program stepping that crosses process and machine boundaries.

Other Tools

Other important WorkShop NEO tools for creating object-based applications include:

Development Frameworks

Runtime re-usable application components are the building blocks for custom applications, enabling rapid prototyping as well as clone-and-modify application development. The NEO Services and OpenStep development frameworks provide the basic software for writing the user interface part of applications, as well as the fundamental elements to use and manage system resources such as displaying, printing, text editing, color selection, file manipulation, and browsing. These foundation objects give the developer a head start towards exploiting the technology, and allows rapid development of re-usable business object libraries.

Frameworks provided include:

NEO Services Development Framework


Enterprise Integration with NEO


Many business environments now include personal computers connected to a LAN, and no systems architecture can be considered complete without a means of integrating them with the corporate network. SunSoft has not neglected this consideration with NEO, and has made arrangements with IONA Technologies to support object interoperability with PCs running Windows.

Windows Connectivity

The Orbix(TM) product from IONA Technologies provides a full CORBA development environment for Windows platforms, providing integration with the Component Object Model (COM) of Microsoft OLE. Orbix creates a bridge between COM objects and NEO objects, allowing them to communicate with each other. This interoperability between a Microsoft OLE-compliant application and a Solaris NEO application was first demonstrated at Object World in July, 1994.

A typical scenario might involve a Windows programmer using Visual Basic or C++ on a PC, developing a front end application that requires access to a business object running on Solaris. With Orbix, OLE-compliant applications can successfully locate objects running in Solaris NEO environment, exchange data with them, and return results back to the OLE application.

OMG CORBA 2 Specification

PC interoperability is further addressed in the CORBA 2.0 Interoperability specification from the OMG. The ORB Interoperability Architecture provides a framework for connecting arbitrary ORBs, and describes bridging methods that may be used between ORBs, allowing for a number of inter-ORB Protocols (IOPs). The Internet Inter-ORB Protocol (Internet IOP) is based on TCP/IP, is simple to implement with low runtime costs, and is the sample reference implementation offered at no cost from SunSoft and the OMG.

Database Connectivity

A wide range of data storage and access options are available and share a common interface. SunSoft is promoting standards and relationships with database vendors to ensure that there are many alternatives available.

The default backing store is the Data Store Manager which automatically provides basic object storage for simple object data. Relational Database Management Systems (RDBMS), with or without Relational Object Encapsulation (ROE), and Object Database Management Systems (ODBMS) are also options.

Legacy Databases

Object implementations may not be able to use the Data Store Manager because of the complexity of the data, for performance considerations, or because of the migration issues involved. These applications may have extensive relational databases from vendors such as Oracle, Sybase, Informix, and CA/Ingres.

Persistence(TM) Software provides interoperability for NEO applications by allowing developers to create object oriented, enterprise applications that can automatically access data stored in relational databases. Using Relational Object Encapsulation technology, Persistence can encapsulate legacy databases in IDL wrappers, effectively making them full-fledged networked objects.

Interoperability between objects and relational databases is a critical link for applications that deal with legacy data. The Persistence solution includes mechanisms which automatically map objects to relational tables; a client object manager that ensures data integrity enforcing object constraints and controlling relational transactions; and a multiple database interface that provides high performance by allowing simultaneous access to more than one database.

OODBMS

An Object-Oriented Database Management Systems (OODBMS) provides the traditional services of a DBMS and raises the level of abstraction from records to objects, facilitating re-use. Many ODBMSs add support for version and configuration management as well as for concurrency. Sun initiated the Object Database Management Group (ODMG) by inviting object database vendors to participate in forming standards for interoperability in 1991. ODMG-93 specifies an interface to object databases that will allow the support of heterogeneous object databases through ORBs from many vendors.

The World Wide Web

Integrating the Java language with the NEO object network allows Web-based Internet front-ends, such as HotJava, to directly access NEO shared services. This technology, nicknamed "JOE", is implemented by adding Java bindings to NEO's OMG IDL compiler. By writing shared enterprise applications services once, and then having access to them from any client running a Java-compliant browser, NEO application service can be accessed directly, without having to first preprocess them for use on the Web.


Questions or comments regarding this service? webmaster@sun.com

Copyright 1996 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA 94043-1100 USA. All rights reserved.